package xyz.blushyes.controller;

import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import xyz.blushyes.service.CacheTestService;

/**
 * 缓存雪崩是什么？
 * 大量 key 同时过期导致大量请求直接达到数据库，或者Redis直接宕机
 * 怎么解决缓存雪崩？
 * 1. TTL中增加一个随机时长，防止大量key同时失效（防止大量key同时失效）
 * 2. 利用Redis集群提高整体可用性（防止Redis宕机）
 * 2. 给缓存业务添加降级限流策略（Redis已经宕机或者已经有大量key同时失效，这时候可以通过网关对该接口进行熔断降级）
 * 4. 设置多级缓存：浏览器缓存、nginx缓存，最后才是Redis缓存
 */
@RestController
@RequiredArgsConstructor
public class AvalancheCacheController {

    private final CacheTestService cacheTestService;

    @GetMapping("/notCache")
    public String notCache(@RequestParam Integer number) {
        return "The id is: " + cacheTestService.notCache(number);
    }

    @GetMapping("/avalancheCache")
    public String avalancheCache(@RequestParam Integer number) {
        return "The id is: " + cacheTestService.avalancheCache(number);
    }

}
